analytic-search插件是阿里云Elasticsearch团队自主开发的日志场景检索插件。通过该插件,您可以实现Kibana Discover查询加速,支持通过开启时间字段index.sort,在特定查询条件下,降低查询耗时;支持开启查询并发功能,大幅降低查询耗时。本文介绍如何使用analytic-search插件。

背景信息

analytic-search插件的主要功能以及各功能的适用场景和性能测试信息如下:

Kibana Discover查询加速功能

  • 适用场景:日志检索场景。例如Kibana Discover中的无条件或单条件查询。
  • 功能优势:通过优化索引合并策略及Date_histogram执行计划策略,在没有查询条件或者仅有一个查询条件时,大幅度降低查询耗时(日增量>1 TB数据量的场景下,分钟级查询可优化至5s内)。
  • 性能测试信息:
    • 测试环境
      • 节点:10 * 16核64 GB。
      • 数据集:某业务日志数据,一天600亿个文档,分成12个索引,每个索引60个分片。
    • 开启Kibana Discover查询加速后,不同存储介质的性能表现如下:
      查询条件 SSD云盘 高效云盘 OpenStore存储
      没有查询条件 耗时降低96% 耗时降低95% 耗时降低94%
      一个查询条件 耗时降低88% 耗时降低77% 耗时降低85%
      多个查询条件 耗时降低8% 耗时降低11% 耗时降低14%

查询并发功能

  • 适用场景:查询QPS低,查询召回阶段耗时高,节点计算资源充足的场景。
  • 功能优势:通过实现召回过程的并发,提高资源利用率,召回阶段平均耗时降低50%。
  • 性能测试信息:
    • 测试环境
      • 节点:3 * 16核64 GB OpenStore冷热共享计算型。
      • 数据集:某业务日志数据,单索引1.6 TB,60亿个文档,60个分片。
      • 查询:3 TermQuery(and) + TimeRange + Sort + Datehistogram,单shard命中1000w(命中率10%)。
    • 测试结果:
      • 单shard查询耗时降低65%。
      • 多shard查询耗时降低53%。

前提条件

已创建阿里云Elasticsearch实例,版本为7.10.0且内核版本为1.7.0及以上。本文以阿里云Elasticsearch 7.10.0为例介绍,创建实例的方法请参见创建阿里云Elasticsearch实例
说明 analytic-search插件默认已安装,不可卸载,您可在插件配置页面查看。

开启Kibana Discover查询加速

创建索引时,在settingsmappings中增加如下配置即可。
说明 以下示例仅供参考。实际使用时,您需要按照业务实际字段名称调整index.sort的时间戳字段名和排序。
{
  "settings": {
    "index.points.same_sort_order_as_index_sort": true,
    "index.sort.field": [
      "@timestamp"
    ],
    "index.sort.order": [
      "desc"
    ]
  },
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date"
      }
    }
  }
}

使用查询并发功能

  1. 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。
    登录Kibana控制台的具体操作,请参见登录Kibana控制台
    说明 本文以阿里云Elasticsearch 7.10.0版本为例,其他版本操作可能略有差别,请以实际界面为准。
  2. 单击右上角的Dev tools
  3. Console页签,执行以下脚本,开启并发查询。
    PUT _cluster/settings
    {
      "persistent": {
        "apack.analytic_search.doc_concurrency.enabled": "true"
      }
    }
    集群设置以上配置后,阿里云Elasticsearch新接收到的查询任务将会按默认的并发策略执行,您可以通过调整并发相关配置来控制并发查询行为,相关的配置如下。
    • 集群级别配置
      参数 默认值 说明
      apack.analytic_search.doc_concurrency.enabled false 是否开启查询并发功能:
      • true:开启
      • false:不开启
      apack.analytic_search.doc_concurrency.concurrent.policy 80%:4;90%:2 查询并发策略,格式为:阈值1:并发度1;阈值2:并发度2;...

      其中并发度n为节点CPU使用率小于阈值n时,并发查询使用的并发度。例如,80%:4;90%:2表示节点的CPU使用率小于80%使用4并发,小于90%使用2并发,大于等于90%不使用并发。

      apack.analytic_search.doc_concurrency.min_support_doc 10000 使用查询并发的索引的最少文档数,索引文档数低于该值则不使用查询并发。
      apack.analytic_search.doc_concurrency.min_support_processors 4 使用查询并发的节点的最少核数,节点核数低于该值则不使用查询并发。
      apack.analytic_search.doc_concurrency.max_support_heap_usage 80% 使用查询并发的节点的最高JVM heap使用率,节点JVM heap使用率高于该值则不使用查询并发。
      apack.analytic_search.doc_concurrency.max_support_cpu_usage 90% 使用查询并发的节点的最高CPU使用率,节点CPU使用率高于该值则不使用查询并发。
    • 索引级别settings
      参数 默认值 说明
      index.apack.analytic_search.doc_concurrency.enabled true 是否开启查询并发功能:
      • true:开启
      • false:不开启
      index.apack.analytic_search.doc_concurrency.allow_no_agg false 是否对不带agg的查询使用查询并发功能:
      • true:使用
      • false:不使用